package com.baseLesson._02_dataStruct._01_Array;
/**
 * 动态数组
 *      需求：
 *          在不知道班级同学数量的情况下，把同学姓名存入数组中，该怎么办？
 *          解决方案一：
 *              1.初始化容量为10的数组
 *              2.每次添加同学名称判断数组容量
 *                  够用：添加
 *                  不够用：扩容，添加（开辟更大的固定空间，搬家，小容量中数据，
 *                                      遍历存储到新开辟的大空间中）
 *
 *
 *
 * @param <E>
 */
public class DynamicArraySimple<E> {


    private E[] data;
    private int size;

    // 构造函数，传入数组的容量capacity构造Array
    public DynamicArraySimple(int capacity){
        data = (E[])new Object[capacity];
        size = 0;
    }

    // 无参数的构造函数，默认数组的容量capacity=10
    public DynamicArraySimple(){
        this(10);
    }

    // 获取数组的容量
    public int getCapacity(){
        return data.length;
    }


    // 获取数组中的元素个数
    public int getSize(){
        return size;
    }

    // 返回数组是否为空
    public boolean isEmpty(){
        return size == 0;
    }


    // 向所有元素后添加一个新元素
    public void addLast(E e){
        boolean full = false;

        if (full){
            resize(size*2);
        }else {
            data[size-1] = e;
            size++;
        }
    }

    // 将数组空间的容量变成newCapacity大小
    private void resize(int newCapacity){

        E[] newData = (E[])new Object[newCapacity];
        for(int i = 0 ; i < size ; i ++)
            newData[i] = data[i];
        data = newData;
    }
}